/**
 * @file bsp.h
 * @author Morris (morris@mnblog.cn)
 * @brief
 * @version 0.0.1
 * @date 2022-01-17
 *
 * @copyright Copyright (c) 2022
 *
 */
#ifndef __BOARD_BSP_H__
#define __BOARD_BSP_H__

#include "board_device.h"

typedef struct
{
    uint8_t id[6];
} bsp_sn_t;

typedef struct bsp_time
{
    uint8_t second; //时间：秒
    uint8_t minute; //时间：分
    uint8_t hour;   //时间：时
    uint8_t week;   //时间：周
    uint8_t day;    //时间：日
    uint8_t month;  //时间：月
    uint8_t year;   //时间：年
} bsp_time_t;

typedef void (*bsp_rtc_interrupt_callback_t)(void);

void bsp_clock_init(void);
void bsp_init(void);

void bsp_delay_ms(uint32_t tick);
void bsp_delay_us(uint32_t us);
void bsp_rtc_interrupt_register(bsp_rtc_interrupt_callback_t callback);

uint32_t bsp_get_datetime(bsp_time_t *time);

void bsp_low_power_init(void);
void bsp_deep_sleep(void);

void bsp_wdt_init(void);
void bsp_wdt_feed(void);

void bsp_reboot(void);

void bsp_log_init(void);

uint8_t bsp_get_reset_flag(void);

#ifdef DEBUG_UART
void bsp_debug_print(const char *format, ...);
#else
    #define bsp_debug_print(format, ...)
#endif

uint8_t bps_get_device_type(void);
void    bps_get_loat_number(const bk9000_sn_t**const sn);

#endif /* __BOARD_BSP_H__ */
